<?php
/*
===============================================================================
	Contiene todas aquellas funciones con relacion a Cursos que nesesiten
	manipular registros de la tabla de usuarios en la base de datos.
===============================================================================
 */
class Cursos_Model extends CI_Model
{
	const TABLA_CURSOS = 'cursos_lx_np_2013';
	const TABLA_MATE_ALUM = 'mate_alum_lx_np_2013';
	const TABLA_MATERIAS = 'materias_lx_np_2013';
	const TABLA_MAESTROS = 'maestros_lx_np_2013';

	/*
	====================
	ObtenerTodos

	Ejecuta una consulta, obteniendo todos los registros de cursos, los guarda en un arreglo y retorna el mismo.
	====================
	*/
	function ObtenerTodos()
	{
		$this->db->select('id_curso,maestro,grupo,materia,periodo');
		$resultado = $this->db->get(self::TABLA_CURSOS);
		if ( $resultado->num_rows() > 0 ) {
			foreach ($resultado->result() as $fila) {
				$todosRegistros[] = $fila;
			}
			return $todosRegistros;
		}
		return FALSE;
	}

	/*
	====================
	ObtenerTodos

	Ejecuta una consulta, obteniendo todos los registros relacionales de cursos-alumnos, los guarda en un arreglo y retorna el mismo.
	====================
	*/
	function ObtenerTodosRelacion()
	{
		$this->db->select('matricula,grupo,materia,ciclo');
		$resultado = $this->db->get(self::TABLA_MATE_ALUM);
		if ( $resultado ) {
			if ( $resultado->num_rows() > 0 ) {
				foreach ($resultado->result() as $fila) {
					$todosRegistros[] = $fila;
				}
				return $todosRegistros;
			}
			return FALSE;
		}
	}

	/*
	====================
	ObtenerTodos

	Ejecuta una consulta, obteniendo todos los registros de cursos, los guarda en un arreglo y retorna el mismo.
	Obtiene registros de 20 en 20, utilizado en la paginacion.
	====================
	*/
	function ObtenerTodosTabla()
	{
		$offset = $this->uri->segment(3);
		if ( $offset == NULL ) {
			$offset = 0;
		}
		$query ="SELECT id_curso,maestro,Maestros.nombre AS maestro_n,grupo,materia,Materias.nombre AS materia_n,periodo
				    FROM (
	                    SELECT id_curso,maestro,nombre,grupo,materia,periodo
	                    FROM ". self::TABLA_CURSOS ."
	                    INNER JOIN (\n
		                    SELECT * FROM " . self::TABLA_MAESTROS . " ) AS Maest
	                    ON Maest.id = " . self::TABLA_CURSOS . ".maestro ) AS Maestros
                    INNER JOIN " . self::TABLA_MATERIAS . " AS Materias
                    ON Materias.clave = Maestros.materia ORDER BY id_curso ASC LIMIT 20 OFFSET " . $offset . ";";
		$resultado = $this->db->query($query);
		if ( $resultado->num_rows() > 0 ) {
			foreach ($resultado->result() as $fila) {
				$todosRegistros[] = $fila;
			}
			return $todosRegistros;
		}
		return FALSE;
	}

	/*
	====================
	BuscarPorMaestro

	Busca el registro mediante la matricula de maestro especificada y retorna todos los campos del registro.
	====================
	*/
	function BuscarPorMaestro($maestro)
	{
		$offset = $this->uri->segment(3);
		if ( $offset == NULL ) {
			$offset = 0;
		}
		$query ="SELECT id_curso,maestro,Maestros.nombre AS maestro_n,grupo,materia,Materias.nombre AS materia_n,periodo
				    FROM (
	                    SELECT id_curso,maestro,nombre,grupo,materia,periodo
	                    FROM ". self::TABLA_CURSOS ."
	                    INNER JOIN (\n
		                    SELECT * FROM " . self::TABLA_MAESTROS . " ) AS Maest
	                    ON Maest.id = " . self::TABLA_CURSOS . ".maestro ) AS Maestros
                    INNER JOIN " . self::TABLA_MATERIAS . " AS Materias
                    ON Materias.clave = Maestros.materia
                    WHERE maestro = '" . $maestro . "'
                    ORDER BY id_curso ASC LIMIT 20 OFFSET " . $offset . ";";
		$res = $this->db->query($query);
		if( $res->num_rows() > 0 ){
			foreach ( $res->result() as $fila ) {
				$registro[] = $fila;
			}
			return $registro;
		}
	}

	/*
	====================
	BuscarPorGrupo

	Busca el registro mediante el grupo especificado y retorna todos los campos del registro.
	====================
	*/
	function BuscarPorGrupo($grupo)
	{
		$offset = $this->uri->segment(3);
		if ( $offset == NULL ) {
			$offset = 0;
		}
		$query ="SELECT id_curso,maestro,Maestros.nombre AS maestro_n,grupo,materia,Materias.nombre AS materia_n,periodo
				    FROM (
	                    SELECT id_curso,maestro,nombre,grupo,materia,periodo
	                    FROM ". self::TABLA_CURSOS ."
	                    INNER JOIN (\n
		                    SELECT * FROM " . self::TABLA_MAESTROS . " ) AS Maest
	                    ON Maest.id = " . self::TABLA_CURSOS . ".maestro ) AS Maestros
                    INNER JOIN " . self::TABLA_MATERIAS . " AS Materias
                    ON Materias.clave = Maestros.materia
                    WHERE grupo = '" . $grupo . "'
                    ORDER BY id_curso ASC LIMIT 20 OFFSET " . $offset . ";";
		$res = $this->db->query($query);
		if( $res->num_rows() > 0 ){
			foreach ( $res->result() as $fila ) {
				$registro[] = $fila;
			}
			return $registro;
		}
	}

	/*
	====================
	BuscarPorMateria

	Busca el registro mediante la materia especificada y retorna todos los campos del registro.
	====================
	*/
	function BuscarPorMateria($materia)
	{
		$offset = $this->uri->segment(3);
		if ( $offset == NULL ) {
			$offset = 0;
		}
		$query ="SELECT id_curso,maestro,Maestros.nombre AS maestro_n,grupo,materia,Materias.nombre AS materia_n,periodo
				    FROM (
	                    SELECT id_curso,maestro,nombre,grupo,materia,periodo
	                    FROM ". self::TABLA_CURSOS ."
	                    INNER JOIN (\n
		                    SELECT * FROM " . self::TABLA_MAESTROS . " ) AS Maest
	                    ON Maest.id = " . self::TABLA_CURSOS . ".maestro ) AS Maestros
                    INNER JOIN " . self::TABLA_MATERIAS . " AS Materias
                    ON Materias.clave = Maestros.materia
                    WHERE materia = '" . $materia . "'
                    ORDER BY id_curso ASC LIMIT 20 OFFSET " . $offset . ";";
		$res = $this->db->query($query);
		if( $res->num_rows() > 0 ){
			foreach ( $res->result() as $fila ) {
				$registro[] = $fila;
			}
			return $registro;
		}
	}

	/*
	====================
	BuscarPorPeriodo

	Busca el registro mediante el periodo especificado y retorna todos los campos del registro.
	====================
	*/
	function BuscarPorPeriodo($periodo)
	{
		$offset = $this->uri->segment(3);
		if ( $offset == NULL ) {
			$offset = 0;
		}
		$query ="SELECT id_curso,maestro,Maestros.nombre AS maestro_n,grupo,materia,Materias.nombre AS materia_n,periodo
				    FROM (
	                    SELECT id_curso,maestro,nombre,grupo,materia,periodo
	                    FROM ". self::TABLA_CURSOS ."
	                    INNER JOIN (\n
		                    SELECT * FROM " . self::TABLA_MAESTROS . " ) AS Maest
	                    ON Maest.id = " . self::TABLA_CURSOS . ".maestro ) AS Maestros
                    INNER JOIN " . self::TABLA_MATERIAS . " AS Materias
                    ON Materias.clave = Maestros.materia
                    WHERE periodo = '" . $periodo . "'
                    ORDER BY id_curso ASC LIMIT 20 OFFSET " . $offset . ";";
		$res = $this->db->query($query);
		if( $res->num_rows() > 0 ){
			foreach ( $res->result() as $fila ) {
				$registro[] = $fila;
			}
			return $registro;
		}
	}

	/*
	====================
	AgregarRegistrosCursos

	Inserta las datos del arreglo asociado en la tabla de Cursos (Ignora repetidos).
	====================
	*/
	function AgregarRegistrosCursos($arregloDatos)
	{
		$this->db->insert(self::TABLA_CURSOS,$arregloDatos);
		return $this->db->affected_rows();
	}

	/*
	====================
	ActualizarRegistroCurso

	Actualiza el nombre del alumno del registro con la matricula especificada.
	====================
	*/
	function ActualizarRegistroCurso($arregloDatos)
	{
		$query = "UPDATE " . self::TABLA_CURSOS . " SET maestro = ? , grupo = ? , materia = ? , id_ciclo = ? , periodo = ? WHERE id_curso = ?";
		$this->db->query($query,array($arregloDatos['maestro'],$arregloDatos['grupo'],$arregloDatos['materia'],$arregloDatos['periodo'],$arregloDatos['periodo'],$arregloDatos['curso']));
		return $this->db->affected_rows();
	}

	/*
	====================
	EliminarRegistro

	Elimina el registro donde coincide con la id_curso especificada.
	Retorna la cantidad de filas afectadas
	0 - Fallo
	1 - Exito
	====================
	*/
	function EliminarRegistro($curso)
	{
		$query = "DELETE FROM " . self:: TABLA_CURSOS . " WHERE id_curso = ?";
		$this->db->query($query,$curso);
		return $this->db->affected_rows();
	}

	/*
	====================
	ContarRegistros

	Retorna la cantidad total de registros existentes de alumnos.
	====================
	*/
	function ContarRegistros()
	{
		$totalRegistros = $this->db->count_all(self::TABLA_CURSOS);
		return $totalRegistros;
	}
}
?>